﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Alfa.Math {
	class Matrix {
	}
}





//#region Assembly Microsoft.Xna.Framework.dll, v4.0.0.0
//// C:\Program Files (x86)\Microsoft XNA\XNA Game Studio\v4.0\References\Windows\x86\Microsoft.Xna.Framework.dll
//#endregion

//using Microsoft.Xna.Framework.Design;
//using System;
//using System.ComponentModel;
//using System.Diagnostics.CodeAnalysis;

//namespace Microsoft.Xna.Framework {
//	// Summary:
//	//     Defines a matrix.
//	[Serializable]
//	[TypeConverter(typeof(MatrixConverter))]
//	public struct Matrix : IEquatable<Matrix> {
//		// Summary:
//		//     Value at row 1 column 1 of the matrix.
//		[SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields")]
//		public float M11;
//		//
//		// Summary:
//		//     Value at row 1 column 2 of the matrix.
//		[SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields")]
//		public float M12;
//		//
//		// Summary:
//		//     Value at row 1 column 3 of the matrix.
//		[SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields")]
//		public float M13;
//		//
//		// Summary:
//		//     Value at row 1 column 4 of the matrix.
//		[SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields")]
//		public float M14;
//		//
//		// Summary:
//		//     Value at row 2 column 1 of the matrix.
//		[SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields")]
//		public float M21;
//		//
//		// Summary:
//		//     Value at row 2 column 2 of the matrix.
//		[SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields")]
//		public float M22;
//		//
//		// Summary:
//		//     Value at row 2 column 3 of the matrix.
//		[SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields")]
//		public float M23;
//		//
//		// Summary:
//		//     Value at row 2 column 4 of the matrix.
//		[SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields")]
//		public float M24;
//		//
//		// Summary:
//		//     Value at row 3 column 1 of the matrix.
//		[SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields")]
//		public float M31;
//		//
//		// Summary:
//		//     Value at row 3 column 2 of the matrix.
//		[SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields")]
//		public float M32;
//		//
//		// Summary:
//		//     Value at row 3 column 3 of the matrix.
//		[SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields")]
//		public float M33;
//		//
//		// Summary:
//		//     Value at row 3 column 4 of the matrix.
//		[SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields")]
//		public float M34;
//		//
//		// Summary:
//		//     Value at row 4 column 1 of the matrix.
//		[SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields")]
//		public float M41;
//		//
//		// Summary:
//		//     Value at row 4 column 2 of the matrix.
//		[SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields")]
//		public float M42;
//		//
//		// Summary:
//		//     Value at row 4 column 3 of the matrix.
//		[SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields")]
//		public float M43;
//		//
//		// Summary:
//		//     Value at row 4 column 4 of the matrix.
//		[SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields")]
//		public float M44;

//		//
//		// Summary:
//		//     Initializes a new instance of Matrix.
//		//
//		// Parameters:
//		//   m11:
//		//     Value to initialize m11 to.
//		//
//		//   m12:
//		//     Value to initialize m12 to.
//		//
//		//   m13:
//		//     Value to initialize m13 to.
//		//
//		//   m14:
//		//     Value to initialize m14 to.
//		//
//		//   m21:
//		//     Value to initialize m21 to.
//		//
//		//   m22:
//		//     Value to initialize m22 to.
//		//
//		//   m23:
//		//     Value to initialize m23 to.
//		//
//		//   m24:
//		//     Value to initialize m24 to.
//		//
//		//   m31:
//		//     Value to initialize m31 to.
//		//
//		//   m32:
//		//     Value to initialize m32 to.
//		//
//		//   m33:
//		//     Value to initialize m33 to.
//		//
//		//   m34:
//		//     Value to initialize m34 to.
//		//
//		//   m41:
//		//     Value to initialize m41 to.
//		//
//		//   m42:
//		//     Value to initialize m42 to.
//		//
//		//   m43:
//		//     Value to initialize m43 to.
//		//
//		//   m44:
//		//     Value to initialize m44 to.
//		[SuppressMessage("Microsoft.Design", "CA1025")]
//		public Matrix(float m11, float m12, float m13, float m14, float m21, float m22, float m23, float m24, float m31, float m32, float m33, float m34, float m41, float m42, float m43, float m44);

//		// Summary:
//		//     Negates individual elements of a matrix.
//		//
//		// Parameters:
//		//   matrix1:
//		//     Source matrix.
//		public static Matrix operator -(Matrix matrix1);
//		//
//		// Summary:
//		//     Subtracts matrices.
//		//
//		// Parameters:
//		//   matrix1:
//		//     Source matrix.
//		//
//		//   matrix2:
//		//     Source matrix.
//		public static Matrix operator -(Matrix matrix1, Matrix matrix2);
//		//
//		// Summary:
//		//     Tests a matrix for inequality with another matrix.
//		//
//		// Parameters:
//		//   matrix1:
//		//     The matrix on the left of the equal sign.
//		//
//		//   matrix2:
//		//     The matrix on the right of the equal sign.
//		public static bool operator !=(Matrix matrix1, Matrix matrix2);
//		//
//		// Summary:
//		//     Multiplies a matrix by a scalar value.
//		//
//		// Parameters:
//		//   scaleFactor:
//		//     Scalar value.
//		//
//		//   matrix:
//		//     Source matrix.
//		public static Matrix operator *(float scaleFactor, Matrix matrix);
//		//
//		// Summary:
//		//     Multiplies a matrix by a scalar value.
//		//
//		// Parameters:
//		//   matrix:
//		//     Source matrix.
//		//
//		//   scaleFactor:
//		//     Scalar value.
//		public static Matrix operator *(Matrix matrix, float scaleFactor);
//		//
//		// Summary:
//		//     Multiplies a matrix by another matrix.
//		//
//		// Parameters:
//		//   matrix1:
//		//     Source matrix.
//		//
//		//   matrix2:
//		//     Source matrix.
//		public static Matrix operator *(Matrix matrix1, Matrix matrix2);
//		//
//		// Summary:
//		//     Divides the components of a matrix by a scalar.
//		//
//		// Parameters:
//		//   matrix1:
//		//     Source matrix.
//		//
//		//   divider:
//		//     The divisor.
//		public static Matrix operator /(Matrix matrix1, float divider);
//		//
//		// Summary:
//		//     Divides the components of a matrix by the corresponding components of another
//		//     matrix.
//		//
//		// Parameters:
//		//   matrix1:
//		//     Source matrix.
//		//
//		//   matrix2:
//		//     The divisor.
//		public static Matrix operator /(Matrix matrix1, Matrix matrix2);
//		//
//		// Summary:
//		//     Adds a matrix to another matrix.
//		//
//		// Parameters:
//		//   matrix1:
//		//     Source matrix.
//		//
//		//   matrix2:
//		//     Source matrix.
//		public static Matrix operator +(Matrix matrix1, Matrix matrix2);
//		//
//		// Summary:
//		//     Compares a matrix for equality with another matrix.
//		//
//		// Parameters:
//		//   matrix1:
//		//     Source matrix.
//		//
//		//   matrix2:
//		//     Source matrix.
//		public static bool operator ==(Matrix matrix1, Matrix matrix2);

//		// Summary:
//		//     Gets and sets the backward vector of the Matrix.
//		public Vector3 Backward { get; set; }
//		//
//		// Summary:
//		//     Gets and sets the down vector of the Matrix.
//		public Vector3 Down { get; set; }
//		//
//		// Summary:
//		//     Gets and sets the forward vector of the Matrix.
//		public Vector3 Forward { get; set; }
//		//
//		// Summary:
//		//     Returns an instance of the identity matrix.
//		public static Matrix Identity { get; }
//		//
//		// Summary:
//		//     Gets and sets the left vector of the Matrix.
//		public Vector3 Left { get; set; }
//		//
//		// Summary:
//		//     Gets and sets the right vector of the Matrix.
//		public Vector3 Right { get; set; }
//		//
//		// Summary:
//		//     Gets and sets the translation vector of the Matrix.
//		public Vector3 Translation { get; set; }
//		//
//		// Summary:
//		//     Gets and sets the up vector of the Matrix.
//		public Vector3 Up { get; set; }

//		// Summary:
//		//     Adds a matrix to another matrix.
//		//
//		// Parameters:
//		//   matrix1:
//		//     Source matrix.
//		//
//		//   matrix2:
//		//     Source matrix.
//		public static Matrix Add(Matrix matrix1, Matrix matrix2);
//		//
//		// Summary:
//		//     Adds a matrix to another matrix.
//		//
//		// Parameters:
//		//   matrix1:
//		//     Source matrix.
//		//
//		//   matrix2:
//		//     Source matrix.
//		//
//		//   result:
//		//     [OutAttribute] Resulting matrix.
//		public static void Add(ref Matrix matrix1, ref Matrix matrix2, out Matrix result);
//		//
//		// Summary:
//		//     Creates a spherical billboard that rotates around a specified object position.
//		//
//		// Parameters:
//		//   objectPosition:
//		//     Position of the object the billboard will rotate around.
//		//
//		//   cameraPosition:
//		//     Position of the camera.
//		//
//		//   cameraUpVector:
//		//     The up vector of the camera.
//		//
//		//   cameraForwardVector:
//		//     Optional forward vector of the camera.
//		public static Matrix CreateBillboard(Vector3 objectPosition, Vector3 cameraPosition, Vector3 cameraUpVector, Vector3? cameraForwardVector);
//		//
//		// Summary:
//		//     Creates a spherical billboard that rotates around a specified object position.
//		//
//		// Parameters:
//		//   objectPosition:
//		//     Position of the object the billboard will rotate around.
//		//
//		//   cameraPosition:
//		//     Position of the camera.
//		//
//		//   cameraUpVector:
//		//     The up vector of the camera.
//		//
//		//   cameraForwardVector:
//		//     Optional forward vector of the camera.
//		//
//		//   result:
//		//     [OutAttribute] The created billboard matrix.
//		public static void CreateBillboard(ref Vector3 objectPosition, ref Vector3 cameraPosition, ref Vector3 cameraUpVector, Vector3? cameraForwardVector, out Matrix result);
//		//
//		// Summary:
//		//     Creates a cylindrical billboard that rotates around a specified axis.
//		//
//		// Parameters:
//		//   objectPosition:
//		//     Position of the object the billboard will rotate around.
//		//
//		//   cameraPosition:
//		//     Position of the camera.
//		//
//		//   rotateAxis:
//		//     Axis to rotate the billboard around.
//		//
//		//   cameraForwardVector:
//		//     Optional forward vector of the camera.
//		//
//		//   objectForwardVector:
//		//     Optional forward vector of the object.
//		public static Matrix CreateConstrainedBillboard(Vector3 objectPosition, Vector3 cameraPosition, Vector3 rotateAxis, Vector3? cameraForwardVector, Vector3? objectForwardVector);
//		//
//		// Summary:
//		//     Creates a cylindrical billboard that rotates around a specified axis.
//		//
//		// Parameters:
//		//   objectPosition:
//		//     Position of the object the billboard will rotate around.
//		//
//		//   cameraPosition:
//		//     Position of the camera.
//		//
//		//   rotateAxis:
//		//     Axis to rotate the billboard around.
//		//
//		//   cameraForwardVector:
//		//     Optional forward vector of the camera.
//		//
//		//   objectForwardVector:
//		//     Optional forward vector of the object.
//		//
//		//   result:
//		//     [OutAttribute] The created billboard matrix.
//		public static void CreateConstrainedBillboard(ref Vector3 objectPosition, ref Vector3 cameraPosition, ref Vector3 rotateAxis, Vector3? cameraForwardVector, Vector3? objectForwardVector, out Matrix result);
//		//
//		// Summary:
//		//     Creates a new Matrix that rotates around an arbitrary vector.
//		//
//		// Parameters:
//		//   axis:
//		//     The axis to rotate around.
//		//
//		//   angle:
//		//     The angle to rotate around the vector.
//		public static Matrix CreateFromAxisAngle(Vector3 axis, float angle);
//		//
//		// Summary:
//		//     Creates a new Matrix that rotates around an arbitrary vector.
//		//
//		// Parameters:
//		//   axis:
//		//     The axis to rotate around.
//		//
//		//   angle:
//		//     The angle to rotate around the vector.
//		//
//		//   result:
//		//     [OutAttribute] The created Matrix.
//		public static void CreateFromAxisAngle(ref Vector3 axis, float angle, out Matrix result);
//		//
//		// Summary:
//		//     Creates a rotation Matrix from a Quaternion.
//		//
//		// Parameters:
//		//   quaternion:
//		//     Quaternion to create the Matrix from.
//		public static Matrix CreateFromQuaternion(Quaternion quaternion);
//		//
//		// Summary:
//		//     Creates a rotation Matrix from a Quaternion.
//		//
//		// Parameters:
//		//   quaternion:
//		//     Quaternion to create the Matrix from.
//		//
//		//   result:
//		//     [OutAttribute] The created Matrix.
//		public static void CreateFromQuaternion(ref Quaternion quaternion, out Matrix result);
//		//
//		// Summary:
//		//     Creates a new rotation matrix from a specified yaw, pitch, and roll.
//		//
//		// Parameters:
//		//   yaw:
//		//     Angle of rotation, in radians, around the y-axis.
//		//
//		//   pitch:
//		//     Angle of rotation, in radians, around the x-axis.
//		//
//		//   roll:
//		//     Angle of rotation, in radians, around the z-axis.
//		public static Matrix CreateFromYawPitchRoll(float yaw, float pitch, float roll);
//		//
//		// Summary:
//		//     Fills in a rotation matrix from a specified yaw, pitch, and roll.
//		//
//		// Parameters:
//		//   yaw:
//		//     Angle of rotation, in radians, around the y-axis.
//		//
//		//   pitch:
//		//     Angle of rotation, in radians, around the x-axis.
//		//
//		//   roll:
//		//     Angle of rotation, in radians, around the z-axis.
//		//
//		//   result:
//		//     [OutAttribute] An existing matrix filled in to represent the specified yaw,
//		//     pitch, and roll.
//		public static void CreateFromYawPitchRoll(float yaw, float pitch, float roll, out Matrix result);
//		//
//		// Summary:
//		//     Creates a view matrix.
//		//
//		// Parameters:
//		//   cameraPosition:
//		//     The position of the camera.
//		//
//		//   cameraTarget:
//		//     The target towards which the camera is pointing.
//		//
//		//   cameraUpVector:
//		//     The direction that is "up" from the camera's point of view.
//		public static Matrix CreateLookAt(Vector3 cameraPosition, Vector3 cameraTarget, Vector3 cameraUpVector);
//		//
//		// Summary:
//		//     Creates a view matrix.
//		//
//		// Parameters:
//		//   cameraPosition:
//		//     The position of the camera.
//		//
//		//   cameraTarget:
//		//     The target towards which the camera is pointing.
//		//
//		//   cameraUpVector:
//		//     The direction that is "up" from the camera's point of view.
//		//
//		//   result:
//		//     [OutAttribute] The created view matrix.
//		public static void CreateLookAt(ref Vector3 cameraPosition, ref Vector3 cameraTarget, ref Vector3 cameraUpVector, out Matrix result);
//		//
//		// Summary:
//		//     Builds an orthogonal projection matrix.
//		//
//		// Parameters:
//		//   width:
//		//     Width of the view volume.
//		//
//		//   height:
//		//     Height of the view volume.
//		//
//		//   zNearPlane:
//		//     Minimum z-value of the view volume.
//		//
//		//   zFarPlane:
//		//     Maximum z-value of the view volume.
//		public static Matrix CreateOrthographic(float width, float height, float zNearPlane, float zFarPlane);
//		//
//		// Summary:
//		//     Builds an orthogonal projection matrix.
//		//
//		// Parameters:
//		//   width:
//		//     Width of the view volume.
//		//
//		//   height:
//		//     Height of the view volume.
//		//
//		//   zNearPlane:
//		//     Minimum z-value of the view volume.
//		//
//		//   zFarPlane:
//		//     Maximum z-value of the view volume.
//		//
//		//   result:
//		//     [OutAttribute] The projection matrix.
//		public static void CreateOrthographic(float width, float height, float zNearPlane, float zFarPlane, out Matrix result);
//		//
//		// Summary:
//		//     Builds a customized, orthogonal projection matrix.
//		//
//		// Parameters:
//		//   left:
//		//     Minimum x-value of the view volume.
//		//
//		//   right:
//		//     Maximum x-value of the view volume.
//		//
//		//   bottom:
//		//     Minimum y-value of the view volume.
//		//
//		//   top:
//		//     Maximum y-value of the view volume.
//		//
//		//   zNearPlane:
//		//     Minimum z-value of the view volume.
//		//
//		//   zFarPlane:
//		//     Maximum z-value of the view volume.
//		public static Matrix CreateOrthographicOffCenter(float left, float right, float bottom, float top, float zNearPlane, float zFarPlane);
//		//
//		// Summary:
//		//     Builds a customized, orthogonal projection matrix.
//		//
//		// Parameters:
//		//   left:
//		//     Minimum x-value of the view volume.
//		//
//		//   right:
//		//     Maximum x-value of the view volume.
//		//
//		//   bottom:
//		//     Minimum y-value of the view volume.
//		//
//		//   top:
//		//     Maximum y-value of the view volume.
//		//
//		//   zNearPlane:
//		//     Minimum z-value of the view volume.
//		//
//		//   zFarPlane:
//		//     Maximum z-value of the view volume.
//		//
//		//   result:
//		//     [OutAttribute] The projection matrix.
//		public static void CreateOrthographicOffCenter(float left, float right, float bottom, float top, float zNearPlane, float zFarPlane, out Matrix result);
//		//
//		// Summary:
//		//     Builds a perspective projection matrix and returns the result by value.
//		//
//		// Parameters:
//		//   width:
//		//     Width of the view volume at the near view plane.
//		//
//		//   height:
//		//     Height of the view volume at the near view plane.
//		//
//		//   nearPlaneDistance:
//		//     Distance to the near view plane.
//		//
//		//   farPlaneDistance:
//		//     Distance to the far view plane.
//		public static Matrix CreatePerspective(float width, float height, float nearPlaneDistance, float farPlaneDistance);
//		//
//		// Summary:
//		//     Builds a perspective projection matrix and returns the result by reference.
//		//
//		// Parameters:
//		//   width:
//		//     Width of the view volume at the near view plane.
//		//
//		//   height:
//		//     Height of the view volume at the near view plane.
//		//
//		//   nearPlaneDistance:
//		//     Distance to the near view plane.
//		//
//		//   farPlaneDistance:
//		//     Distance to the far view plane.
//		//
//		//   result:
//		//     [OutAttribute] The projection matrix.
//		public static void CreatePerspective(float width, float height, float nearPlaneDistance, float farPlaneDistance, out Matrix result);
//		//
//		// Summary:
//		//     Builds a perspective projection matrix based on a field of view and returns
//		//     by value.
//		//
//		// Parameters:
//		//   fieldOfView:
//		//     Field of view in the y direction, in radians.
//		//
//		//   aspectRatio:
//		//     Aspect ratio, defined as view space width divided by height. To match the
//		//     aspect ratio of the viewport, the property AspectRatio.
//		//
//		//   nearPlaneDistance:
//		//     Distance to the near view plane.
//		//
//		//   farPlaneDistance:
//		//     Distance to the far view plane.
//		public static Matrix CreatePerspectiveFieldOfView(float fieldOfView, float aspectRatio, float nearPlaneDistance, float farPlaneDistance);
//		//
//		// Summary:
//		//     Builds a perspective projection matrix based on a field of view and returns
//		//     by reference.
//		//
//		// Parameters:
//		//   fieldOfView:
//		//     Field of view in the y direction, in radians.
//		//
//		//   aspectRatio:
//		//     Aspect ratio, defined as view space width divided by height. To match the
//		//     aspect ratio of the viewport, the property AspectRatio.
//		//
//		//   nearPlaneDistance:
//		//     Distance to the near view plane.
//		//
//		//   farPlaneDistance:
//		//     Distance to the far view plane.
//		//
//		//   result:
//		//     [OutAttribute] The perspective projection matrix.
//		public static void CreatePerspectiveFieldOfView(float fieldOfView, float aspectRatio, float nearPlaneDistance, float farPlaneDistance, out Matrix result);
//		//
//		// Summary:
//		//     Builds a customized, perspective projection matrix.
//		//
//		// Parameters:
//		//   left:
//		//     Minimum x-value of the view volume at the near view plane.
//		//
//		//   right:
//		//     Maximum x-value of the view volume at the near view plane.
//		//
//		//   bottom:
//		//     Minimum y-value of the view volume at the near view plane.
//		//
//		//   top:
//		//     Maximum y-value of the view volume at the near view plane.
//		//
//		//   nearPlaneDistance:
//		//     Distance to the near view plane.
//		//
//		//   farPlaneDistance:
//		//     Distance to of the far view plane.
//		public static Matrix CreatePerspectiveOffCenter(float left, float right, float bottom, float top, float nearPlaneDistance, float farPlaneDistance);
//		//
//		// Summary:
//		//     Builds a customized, perspective projection matrix.
//		//
//		// Parameters:
//		//   left:
//		//     Minimum x-value of the view volume at the near view plane.
//		//
//		//   right:
//		//     Maximum x-value of the view volume at the near view plane.
//		//
//		//   bottom:
//		//     Minimum y-value of the view volume at the near view plane.
//		//
//		//   top:
//		//     Maximum y-value of the view volume at the near view plane.
//		//
//		//   nearPlaneDistance:
//		//     Distance to the near view plane.
//		//
//		//   farPlaneDistance:
//		//     Distance to of the far view plane.
//		//
//		//   result:
//		//     [OutAttribute] The created projection matrix.
//		public static void CreatePerspectiveOffCenter(float left, float right, float bottom, float top, float nearPlaneDistance, float farPlaneDistance, out Matrix result);
//		//
//		// Summary:
//		//     Creates a Matrix that reflects the coordinate system about a specified Plane.
//		//
//		// Parameters:
//		//   value:
//		//     The Plane about which to create a reflection.
//		public static Matrix CreateReflection(Plane value);
//		//
//		// Summary:
//		//     Fills in an existing Matrix so that it reflects the coordinate system about
//		//     a specified Plane.
//		//
//		// Parameters:
//		//   value:
//		//     The Plane about which to create a reflection.
//		//
//		//   result:
//		//     [OutAttribute] A Matrix that creates the reflection.
//		public static void CreateReflection(ref Plane value, out Matrix result);
//		//
//		// Summary:
//		//     Returns a matrix that can be used to rotate a set of vertices around the
//		//     x-axis.
//		//
//		// Parameters:
//		//   radians:
//		//     The amount, in radians, in which to rotate around the x-axis. Note that you
//		//     can use ToRadians to convert degrees to radians.
//		public static Matrix CreateRotationX(float radians);
//		//
//		// Summary:
//		//     Populates data into a user-specified matrix that can be used to rotate a
//		//     set of vertices around the x-axis.
//		//
//		// Parameters:
//		//   radians:
//		//     The amount, in radians, in which to rotate around the x-axis. Note that you
//		//     can use ToRadians to convert degrees to radians.
//		//
//		//   result:
//		//     [OutAttribute] The matrix in which to place the calculated data.
//		public static void CreateRotationX(float radians, out Matrix result);
//		//
//		// Summary:
//		//     Returns a matrix that can be used to rotate a set of vertices around the
//		//     y-axis.
//		//
//		// Parameters:
//		//   radians:
//		//     The amount, in radians, in which to rotate around the y-axis. Note that you
//		//     can use ToRadians to convert degrees to radians.
//		public static Matrix CreateRotationY(float radians);
//		//
//		// Summary:
//		//     Populates data into a user-specified matrix that can be used to rotate a
//		//     set of vertices around the y-axis.
//		//
//		// Parameters:
//		//   radians:
//		//     The amount, in radians, in which to rotate around the y-axis. Note that you
//		//     can use ToRadians to convert degrees to radians.
//		//
//		//   result:
//		//     [OutAttribute] The matrix in which to place the calculated data.
//		public static void CreateRotationY(float radians, out Matrix result);
//		//
//		// Summary:
//		//     Returns a matrix that can be used to rotate a set of vertices around the
//		//     z-axis.
//		//
//		// Parameters:
//		//   radians:
//		//     The amount, in radians, in which to rotate around the z-axis. Note that you
//		//     can use ToRadians to convert degrees to radians.
//		public static Matrix CreateRotationZ(float radians);
//		//
//		// Summary:
//		//     Populates data into a user-specified matrix that can be used to rotate a
//		//     set of vertices around the z-axis.
//		//
//		// Parameters:
//		//   radians:
//		//     The amount, in radians, in which to rotate around the z-axis. Note that you
//		//     can use ToRadians to convert degrees to radians.
//		//
//		//   result:
//		//     [OutAttribute] The rotation matrix.
//		public static void CreateRotationZ(float radians, out Matrix result);
//		//
//		// Summary:
//		//     Creates a scaling Matrix.
//		//
//		// Parameters:
//		//   scale:
//		//     Amount to scale by.
//		public static Matrix CreateScale(float scale);
//		//
//		// Summary:
//		//     Creates a scaling Matrix.
//		//
//		// Parameters:
//		//   scales:
//		//     Amounts to scale by on the x, y, and z axes.
//		public static Matrix CreateScale(Vector3 scales);
//		//
//		// Summary:
//		//     Creates a scaling Matrix.
//		//
//		// Parameters:
//		//   scale:
//		//     Value to scale by.
//		//
//		//   result:
//		//     [OutAttribute] The created scaling Matrix.
//		public static void CreateScale(float scale, out Matrix result);
//		//
//		// Summary:
//		//     Creates a scaling Matrix.
//		//
//		// Parameters:
//		//   scales:
//		//     Amounts to scale by on the x, y, and z axes.
//		//
//		//   result:
//		//     [OutAttribute] The created scaling Matrix.
//		public static void CreateScale(ref Vector3 scales, out Matrix result);
//		//
//		// Summary:
//		//     Creates a scaling Matrix.
//		//
//		// Parameters:
//		//   xScale:
//		//     Value to scale by on the x-axis.
//		//
//		//   yScale:
//		//     Value to scale by on the y-axis.
//		//
//		//   zScale:
//		//     Value to scale by on the z-axis.
//		public static Matrix CreateScale(float xScale, float yScale, float zScale);
//		//
//		// Summary:
//		//     Creates a scaling Matrix.
//		//
//		// Parameters:
//		//   xScale:
//		//     Value to scale by on the x-axis.
//		//
//		//   yScale:
//		//     Value to scale by on the y-axis.
//		//
//		//   zScale:
//		//     Value to scale by on the z-axis.
//		//
//		//   result:
//		//     [OutAttribute] The created scaling Matrix.
//		public static void CreateScale(float xScale, float yScale, float zScale, out Matrix result);
//		//
//		// Summary:
//		//     Creates a Matrix that flattens geometry into a specified Plane as if casting
//		//     a shadow from a specified light source.
//		//
//		// Parameters:
//		//   lightDirection:
//		//     A Vector3 specifying the direction from which the light that will cast the
//		//     shadow is coming.
//		//
//		//   plane:
//		//     The Plane onto which the new matrix should flatten geometry so as to cast
//		//     a shadow.
//		public static Matrix CreateShadow(Vector3 lightDirection, Plane plane);
//		//
//		// Summary:
//		//     Fills in a Matrix to flatten geometry into a specified Plane as if casting
//		//     a shadow from a specified light source.
//		//
//		// Parameters:
//		//   lightDirection:
//		//     A Vector3 specifying the direction from which the light that will cast the
//		//     shadow is coming.
//		//
//		//   plane:
//		//     The Plane onto which the new matrix should flatten geometry so as to cast
//		//     a shadow.
//		//
//		//   result:
//		//     [OutAttribute] A Matrix that can be used to flatten geometry onto the specified
//		//     plane from the specified direction.
//		public static void CreateShadow(ref Vector3 lightDirection, ref Plane plane, out Matrix result);
//		//
//		// Summary:
//		//     Creates a translation Matrix.
//		//
//		// Parameters:
//		//   position:
//		//     Amounts to translate by on the x, y, and z axes.
//		public static Matrix CreateTranslation(Vector3 position);
//		//
//		// Summary:
//		//     Creates a translation Matrix.
//		//
//		// Parameters:
//		//   position:
//		//     Amounts to translate by on the x, y, and z axes.
//		//
//		//   result:
//		//     [OutAttribute] The created translation Matrix.
//		public static void CreateTranslation(ref Vector3 position, out Matrix result);
//		//
//		// Summary:
//		//     Creates a translation Matrix.
//		//
//		// Parameters:
//		//   xPosition:
//		//     Value to translate by on the x-axis.
//		//
//		//   yPosition:
//		//     Value to translate by on the y-axis.
//		//
//		//   zPosition:
//		//     Value to translate by on the z-axis.
//		public static Matrix CreateTranslation(float xPosition, float yPosition, float zPosition);
//		//
//		// Summary:
//		//     Creates a translation Matrix.
//		//
//		// Parameters:
//		//   xPosition:
//		//     Value to translate by on the x-axis.
//		//
//		//   yPosition:
//		//     Value to translate by on the y-axis.
//		//
//		//   zPosition:
//		//     Value to translate by on the z-axis.
//		//
//		//   result:
//		//     [OutAttribute] The created translation Matrix.
//		public static void CreateTranslation(float xPosition, float yPosition, float zPosition, out Matrix result);
//		//
//		// Summary:
//		//     Creates a world matrix with the specified parameters.
//		//
//		// Parameters:
//		//   position:
//		//     Position of the object. This value is used in translation operations.
//		//
//		//   forward:
//		//     Forward direction of the object.
//		//
//		//   up:
//		//     Upward direction of the object; usually [0, 1, 0].
//		public static Matrix CreateWorld(Vector3 position, Vector3 forward, Vector3 up);
//		//
//		// Summary:
//		//     Creates a world matrix with the specified parameters.
//		//
//		// Parameters:
//		//   position:
//		//     Position of the object. This value is used in translation operations.
//		//
//		//   forward:
//		//     Forward direction of the object.
//		//
//		//   up:
//		//     Upward direction of the object; usually [0, 1, 0].
//		//
//		//   result:
//		//     [OutAttribute] The created world matrix.
//		public static void CreateWorld(ref Vector3 position, ref Vector3 forward, ref Vector3 up, out Matrix result);
//		//
//		// Summary:
//		//     Extracts the scalar, translation, and rotation components from a 3D scale/rotate/translate
//		//     (SRT) Matrix. Reference page contains code sample.
//		//
//		// Parameters:
//		//   scale:
//		//     [OutAttribute] The scalar component of the transform matrix, expressed as
//		//     a Vector3.
//		//
//		//   rotation:
//		//     [OutAttribute] The rotation component of the transform matrix, expressed
//		//     as a Quaternion.
//		//
//		//   translation:
//		//     [OutAttribute] The translation component of the transform matrix, expressed
//		//     as a Vector3.
//		public bool Decompose(out Vector3 scale, out Quaternion rotation, out Vector3 translation);
//		//
//		// Summary:
//		//     Calculates the determinant of the matrix.
//		public float Determinant( );
//		//
//		// Summary:
//		//     Divides the components of a matrix by a scalar.
//		//
//		// Parameters:
//		//   matrix1:
//		//     Source matrix.
//		//
//		//   divider:
//		//     The divisor.
//		public static Matrix Divide(Matrix matrix1, float divider);
//		//
//		// Summary:
//		//     Divides the components of a matrix by the corresponding components of another
//		//     matrix.
//		//
//		// Parameters:
//		//   matrix1:
//		//     Source matrix.
//		//
//		//   matrix2:
//		//     The divisor.
//		public static Matrix Divide(Matrix matrix1, Matrix matrix2);
//		//
//		// Summary:
//		//     Divides the components of a matrix by a scalar.
//		//
//		// Parameters:
//		//   matrix1:
//		//     Source matrix.
//		//
//		//   divider:
//		//     The divisor.
//		//
//		//   result:
//		//     [OutAttribute] Result of the division.
//		public static void Divide(ref Matrix matrix1, float divider, out Matrix result);
//		//
//		// Summary:
//		//     Divides the components of a matrix by the corresponding components of another
//		//     matrix.
//		//
//		// Parameters:
//		//   matrix1:
//		//     Source matrix.
//		//
//		//   matrix2:
//		//     The divisor.
//		//
//		//   result:
//		//     [OutAttribute] Result of the division.
//		public static void Divide(ref Matrix matrix1, ref Matrix matrix2, out Matrix result);
//		//
//		// Summary:
//		//     Determines whether the specified Object is equal to the Matrix.
//		//
//		// Parameters:
//		//   other:
//		//     The Object to compare with the current Matrix.
//		public bool Equals(Matrix other);
//		//
//		// Summary:
//		//     Returns a value that indicates whether the current instance is equal to a
//		//     specified object.
//		//
//		// Parameters:
//		//   obj:
//		//     Object with which to make the comparison.
//		public override bool Equals(object obj);
//		//
//		// Summary:
//		//     Gets the hash code of this object.
//		public override int GetHashCode( );
//		//
//		// Summary:
//		//     Calculates the inverse of a matrix.
//		//
//		// Parameters:
//		//   matrix:
//		//     Source matrix.
//		public static Matrix Invert(Matrix matrix);
//		//
//		// Summary:
//		//     Calculates the inverse of a matrix.
//		//
//		// Parameters:
//		//   matrix:
//		//     The source matrix.
//		//
//		//   result:
//		//     [OutAttribute] The inverse of matrix. The same matrix can be used for both
//		//     arguments.
//		public static void Invert(ref Matrix matrix, out Matrix result);
//		//
//		// Summary:
//		//     Linearly interpolates between the corresponding values of two matrices.
//		//
//		// Parameters:
//		//   matrix1:
//		//     Source matrix.
//		//
//		//   matrix2:
//		//     Source matrix.
//		//
//		//   amount:
//		//     Interpolation value.
//		public static Matrix Lerp(Matrix matrix1, Matrix matrix2, float amount);
//		//
//		// Summary:
//		//     Linearly interpolates between the corresponding values of two matrices.
//		//
//		// Parameters:
//		//   matrix1:
//		//     Source matrix.
//		//
//		//   matrix2:
//		//     Source matrix.
//		//
//		//   amount:
//		//     Interpolation value.
//		//
//		//   result:
//		//     [OutAttribute] Resulting matrix.
//		public static void Lerp(ref Matrix matrix1, ref Matrix matrix2, float amount, out Matrix result);
//		//
//		// Summary:
//		//     Multiplies a matrix by a scalar value.
//		//
//		// Parameters:
//		//   matrix1:
//		//     Source matrix.
//		//
//		//   scaleFactor:
//		//     Scalar value.
//		public static Matrix Multiply(Matrix matrix1, float scaleFactor);
//		//
//		// Summary:
//		//     Multiplies a matrix by another matrix.
//		//
//		// Parameters:
//		//   matrix1:
//		//     Source matrix.
//		//
//		//   matrix2:
//		//     Source matrix.
//		public static Matrix Multiply(Matrix matrix1, Matrix matrix2);
//		//
//		// Summary:
//		//     Multiplies a matrix by a scalar value.
//		//
//		// Parameters:
//		//   matrix1:
//		//     Source matrix.
//		//
//		//   scaleFactor:
//		//     Scalar value.
//		//
//		//   result:
//		//     [OutAttribute] The result of the multiplication.
//		public static void Multiply(ref Matrix matrix1, float scaleFactor, out Matrix result);
//		//
//		// Summary:
//		//     Multiplies a matrix by another matrix.
//		//
//		// Parameters:
//		//   matrix1:
//		//     Source matrix.
//		//
//		//   matrix2:
//		//     Source matrix.
//		//
//		//   result:
//		//     [OutAttribute] Result of the multiplication.
//		public static void Multiply(ref Matrix matrix1, ref Matrix matrix2, out Matrix result);
//		//
//		// Summary:
//		//     Negates individual elements of a matrix.
//		//
//		// Parameters:
//		//   matrix:
//		//     Source matrix.
//		public static Matrix Negate(Matrix matrix);
//		//
//		// Summary:
//		//     Negates individual elements of a matrix.
//		//
//		// Parameters:
//		//   matrix:
//		//     Source matrix.
//		//
//		//   result:
//		//     [OutAttribute] Negated matrix.
//		public static void Negate(ref Matrix matrix, out Matrix result);
//		//
//		// Summary:
//		//     Subtracts matrices.
//		//
//		// Parameters:
//		//   matrix1:
//		//     Source matrix.
//		//
//		//   matrix2:
//		//     Source matrix.
//		public static Matrix Subtract(Matrix matrix1, Matrix matrix2);
//		//
//		// Summary:
//		//     Subtracts matrices.
//		//
//		// Parameters:
//		//   matrix1:
//		//     Source matrix.
//		//
//		//   matrix2:
//		//     Source matrix.
//		//
//		//   result:
//		//     [OutAttribute] Result of the subtraction.
//		public static void Subtract(ref Matrix matrix1, ref Matrix matrix2, out Matrix result);
//		//
//		// Summary:
//		//     Retrieves a string representation of the current object.
//		public override string ToString( );
//		//
//		// Summary:
//		//     Transforms a Matrix by applying a Quaternion rotation.
//		//
//		// Parameters:
//		//   value:
//		//     The Matrix to transform.
//		//
//		//   rotation:
//		//     The rotation to apply, expressed as a Quaternion.
//		public static Matrix Transform(Matrix value, Quaternion rotation);
//		//
//		// Summary:
//		//     Transforms a Matrix by applying a Quaternion rotation.
//		//
//		// Parameters:
//		//   value:
//		//     The Matrix to transform.
//		//
//		//   rotation:
//		//     The rotation to apply, expressed as a Quaternion.
//		//
//		//   result:
//		//     [OutAttribute] An existing Matrix filled in with the result of the transform.
//		public static void Transform(ref Matrix value, ref Quaternion rotation, out Matrix result);
//		//
//		// Summary:
//		//     Transposes the rows and columns of a matrix.
//		//
//		// Parameters:
//		//   matrix:
//		//     Source matrix.
//		public static Matrix Transpose(Matrix matrix);
//		//
//		// Summary:
//		//     Transposes the rows and columns of a matrix.
//		//
//		// Parameters:
//		//   matrix:
//		//     Source matrix.
//		//
//		//   result:
//		//     [OutAttribute] Transposed matrix.
//		public static void Transpose(ref Matrix matrix, out Matrix result);
//	}
//}
